package com.unju.hibernate.patronDAO.imp;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.criterion.Restrictions;

import com.unju.hibernate.HibernateBase;
import com.unju.hibernate.entidades.Recurso;
import com.unju.hibernate.entidades.Responsable;
import com.unju.hibernate.entidades.Usuario;
import com.unju.hibernate.patronDAO.PatronDAO;

public class RecursoDAOImp extends HibernateBase implements PatronDAO<Recurso> {

	@Override
	public List<Recurso> getAll() {				
		getSession().beginTransaction();		
		List<Recurso> lista=getSession().createCriteria(Recurso.class).list();
		for(Recurso l: lista){
			   Hibernate.initialize(l.getTiporecurso());			   
			  }
        getSession().getTransaction().commit();
        getSession().close();					
		return  lista;
	}

	@Override
	public Recurso get(Integer idDato) {
		getSession().beginTransaction();
		Recurso recurso = (Recurso) getSession().get(
				Recurso.class, idDato);
		getSession().getTransaction().commit();
		getSession().close();
		return recurso;
	}

	@Override
	public void insert(Recurso unDato) {
		getSession().beginTransaction();
		getSession().save(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}

	@Override
	public void update(Recurso unDato) {
		getSession().beginTransaction();
		getSession().update(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}

	@Override
	public void delete(Recurso unDato) {
		getSession().beginTransaction();
		getSession().delete(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}
	
	public Recurso getRecurso(String nombre) {
		Recurso recurso = null;
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Recurso.class);
		criteria.add(Restrictions.eq("nombre", nombre));
		if (criteria.list().size() > 0)
			recurso = (Recurso) criteria.list().get(0);
		getSession().close();
		return recurso;
	}
	
	public ArrayList<Recurso> findByName(String criterio) {
		
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Recurso.class);
        if(!criterio.isEmpty())
        	criteria.add(Restrictions.like("nombre", "%"+criterio+"%"));
        ArrayList<Recurso> lista = (ArrayList<Recurso>) criteria.list();
        for(Recurso l: lista){
			   Hibernate.initialize(l.getTiporecurso());			   
			  }
        getSession().getTransaction().commit();
        getSession().close();		
        return lista;		
	}
	
	public ArrayList<Recurso> findByID(int criterio) {
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Recurso.class);
        if(criterio > 0)
        	criteria.add(Restrictions.like("idRecurso", criterio));
        ArrayList<Recurso> lista = (ArrayList<Recurso>) criteria.list();
        for(Recurso l: lista){
			   Hibernate.initialize(l.getTiporecurso());			   
			  }
        getSession().getTransaction().commit();
        getSession().close();		
        return lista;		
	}
}
